package com.kx.springmybatis.proxy.dynamicproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 动态代理实现，不用创建代理类，自动生成
 *
 * @ClassName MyTest
 * @Author Sun
 * @Date 2021/5/18 15:56
 */
public class MyTest {
    public static void main(String[] args) {

        //创建房东对象
        Landlord landlord = new Landlord();

        //创建动态代理对象
        Available lianjia = (Available) Proxy.newProxyInstance(landlord.getClass().getClassLoader(), landlord.getClass().getInterfaces(), new InvocationHandler() {
            /**
             *处理代理实例上的方法调用并返回结果
             * @param proxy  正在执行的代理对象
             * @param method 代理正在执行的方法
             * @param args 代理传递过来的参数
             * @return Object
             * @Author Sun
             * @Date 2021/5/18 16:14
             **/
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //你代理要增加的额外的扩展功能
                //String methodName = method.getName();
                //System.err.println(methodName);
                System.err.println("代理开始干活了");
                //先执行原始的操作,并获取原始的返回值
                System.err.println(args);
                if (args != null) {
                    System.err.println("---->"+args[0]);
                    //修改原始数据
                    args[0] = 500;
                }
                Object invoke = method.invoke(landlord, args);
                //可以在这提交事务
                return invoke;
            }
        });
        lianjia.kanfang();
        System.err.println(lianjia.qianhetong());
        lianjia.shoufangzu(10000);
    }
}
